package com.bytenebula.data;

import com.bytenebula.entity.meta.MetaDatabase;
import lombok.Getter;

import java.util.Map;
import java.util.HashMap;

/**
 * 定义数据源管理器
 */
@Getter
public abstract class DataSourceHolder {

    // 保存动态数据源对象
    private static final Map<String, DataSourceHolder> holders = new HashMap<>();

    /**
     * 注册数据源
     * @param holder 管理器
     */
    public static void register(DataSourceHolder holder) {
        if (!holders.containsKey(holder.getDataSourceType())) {
            holders.put(holder.getDataSourceType(), holder);
        }
    }

    /**
     * 获取数据源对象
     * @param dbType 数据库类型
     * @return 如果对应的数据库类型存在返回DataSourceHolder，否则返回NULL
     */
    public static DataSourceHolder getHolder(String dbType) {
        if (holders.containsKey(dbType)) {
            return holders.get(dbType);
        }
        return null;
    }

    /**
     * 获取数据源对象
     * @param database 数据库信息
     * @return 如果对应的数据库类型存在返回DataSourceHolder，否则返回NULL
     */
    public static DataSourceHolder getHolder(MetaDatabase database) {
        return getHolder(database.getDbType());
    }

    /**
     * 数据源类型
     */
    protected String dataSourceType;

    /**
     * JDBC URL生成器
     */
    protected JdbcUrlBuilder jdbcUrlBuilder;
}
